package springboot.study.project.interceptor;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import springboot.study.project.model.User;
import springboot.study.project.service.UserService;
import springboot.study.project.util.common.StringUtil;
import springboot.study.project.util.common.Util;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * @ClassName: SesstionInterceptor
 * @Description: 拦截器
 * @Author: liu-hao
 * @Date: 2021-04-01 15:53
 * @Version: 1.0
 **/
@Service
public class SesstionInterceptor implements HandlerInterceptor {
    @Autowired
    UserService userService;

    // 在进入控制器之前执行
    // 如果返回值为false，阻止进入控制器
    // 控制代码（什么请求可以进控制器，什么不可以进）
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        boolean loginStatus = false;
        //System.out.println(request.getServletPath());
        // 获取Cookie，如果找到key为token的cookie，该token对应的用户添加到Session中，使得服务器重启时用户免登录
        Cookie[] cookies = request.getCookies();
        if (cookies != null && cookies.length != 0) {
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals("token")) {
                    User user = userService.findUserByToken(cookie.getValue());
                    if (user != null && Util.getStrOfObj(user.getToken()).equals(cookie.getValue())) {
                        loginStatus = true;
                        HttpSession session = request.getSession();
                        session.setAttribute("user", user);
                        break;
                    }
                }
            }
        }
//            if (!loginStatus) { // 未登录状态直接重定向到登录页面
//                response.sendRedirect("/login");
//            }
        return true;
    }

    // 控制器执行完成，进入到jsp页面之前执行
    // 日志记录
    // 敏感词语过滤
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    // jsp页面执行完成之后执行
    // 记录在执行过程中出现的异常（有没有异常都执行）
    // 可以把异常记录到日志中
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}